package net.suncaper.psychological.service;

import net.suncaper.psychological.model.domain.TimeConfig;
import java.util.List;
import java.util.Map;

/**
 * 时间配置服务层接口
 */
public interface ITimeConfigService {
    
    /**
     * 保存时间配置
     * @param timeConfig 时间配置对象
     * @return 是否成功
     */
    boolean saveTimeConfig(TimeConfig timeConfig);
    
    /**
     * 根据ID删除时间配置
     * @param id 配置ID
     * @return 是否成功
     */
    boolean deleteTimeConfigById(Long id);
    
    /**
     * 更新时间配置
     * @param timeConfig 时间配置对象
     * @return 是否成功
     */
    boolean updateTimeConfig(TimeConfig timeConfig);
    
    /**
     * 根据ID查询时间配置
     * @param id 配置ID
     * @return 时间配置对象
     */
    TimeConfig getTimeConfigById(Long id);
    
    /**
     * 查询所有时间配置
     * @return 时间配置列表
     */
    List<TimeConfig> getAllTimeConfigs();
    
    /**
     * 根据配置类型查询时间配置
     * @param configType 配置类型
     * @return 时间配置列表
     */
    List<TimeConfig> getTimeConfigsByType(String configType);
    
    /**
     * 根据启用状态查询时间配置
     * @param isActive 是否启用
     * @return 时间配置列表
     */
    List<TimeConfig> getTimeConfigsByIsActive(Boolean isActive);
    
    /**
     * 根据配置类型和启用状态查询时间配置
     * @param configType 配置类型
     * @param isActive 是否启用
     * @return 时间配置列表
     */
    List<TimeConfig> getTimeConfigsByTypeAndIsActive(String configType, Boolean isActive);
    
    /**
     * 批量更新启用状态
     * @param ids 配置ID列表
     * @param isActive 是否启用
     * @return 是否成功
     */
    boolean updateIsActiveByIds(List<Long> ids, Boolean isActive);
    
    /**
     * 获取工作时间配置
     * @return 工作时间配置列表
     */
    List<TimeConfig> getWorkingHoursConfigs();
    
    /**
     * 获取间隔时间配置
     * @return 间隔时间配置列表
     */
    List<TimeConfig> getIntervalConfigs();
    
    /**
     * 获取启用的工作时间配置
     * @return 启用的工作时间配置列表
     */
    List<TimeConfig> getActiveWorkingHoursConfigs();
    
    /**
     * 获取启用的间隔时间配置
     * @return 启用的间隔时间配置列表
     */
    List<TimeConfig> getActiveIntervalConfigs();
    
    /**
     * 根据配置类型查询为Map格式的结果
     * @param configType 配置类型
     * @return Map格式的结果列表
     */
    List<Map<String, Object>> getTimeConfigMaps(String configType);
    
    /**
     * 创建默认的时间配置
     * @return 是否成功
     */
    boolean createDefaultTimeConfigs();
    
    /**
     * 验证时间配置是否有效
     * @param timeConfig 时间配置对象
     * @return 验证结果
     */
    boolean validateTimeConfig(TimeConfig timeConfig);
} 